export const vertexShader = `
varying vec2 vUv;
void main() {
    vUv = uv; // 将纹理坐标传递到片段着色器
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
`;


export const fragmentShader = `
uniform sampler2D valueTexture; // 传入纹理
varying vec2 vUv;

// TODO:colormap still need choose
// 输出颜色的RGB分量
vec3 getColorForValue(float inputValue,float valueMin,float valueMax) {
    // 首先，将inputValue归一化到0到1的范围
    float normalizedValue = (inputValue - valueMin) / (valueMax - valueMin);
 
    // 接下来，使用线性插值来近似颜色过渡
    // 注意：这里的颜色过渡是简化的，并且不会完全匹配HSL到RGB的精确转换
    // 我们将使用RGB空间中的直接插值来近似所需的颜色
 
    // 定义红色和绿色的RGB值（纯色）
    vec3 red = vec3(1.0, 0.0, 0.0);
    vec3 green = vec3(0.0, 1.0, 0.0);
    // 定义一个介于绿色和蓝色之间的颜色（这里使用青色作为示例，但这不是纯蓝色）
    // 如果你想要更接近蓝色的颜色，你需要手动计算或选择一个更合适的颜色
    vec3 blueish = vec3(0.0, 1.0, 1.0); // 青色，但注意这不是纯蓝色
 
    // 使用线性插值
    vec3 color;
    if (normalizedValue <= 0.5) {
        // 从红色到绿色的过渡
        color = mix(red, green, normalizedValue * 2.0); // 乘以2是因为我们要在0-1范围内覆盖0-120度的色调变化
    } else {
        // 从绿色到某个蓝色调的过渡（这里使用青色作为中间色）
        // 注意：这里的插值不会给出纯蓝色，而是绿色和青色之间的某个颜色
        // 如果你想要更精确的蓝色，你需要使用更复杂的插值或查找表
        float greenToBlueLerp = (normalizedValue - 0.5) * 2.0; // 映射到0-1范围
        color = mix(green, blueish, greenToBlueLerp);
        
        // 可选：进一步调整颜色以更接近蓝色（这只是一个示例，可能需要根据需要进行调整）
        // color = vec3(color.r * (1.0 - greenToBlueLerp), color.g, color.b * greenToBlueLerp);
        // 上面的代码行试图减少红色分量并增加蓝色分量，但效果可能有限且不一定准确
    }
 
    // 返回计算出的颜色
    return color;
}

vec3 value2color(float inputValue,float minValue,float maxValue){
    float step = (maxValue - minValue) / 10.0;

    if(inputValue < minValue + step){
        return vec3(0.0, 0.0, 1.0);
    } else if(inputValue < minValue + 2.0 * step){
        return vec3(0.0, 0.25, 0.75);
    } else if(inputValue < minValue + 3.0 * step){
        return vec3(0.0, 0.5, 0.5);
    } else if(inputValue < minValue + 4.0 * step){
        return vec3(0.0, 0.75, 0.25);
    } else if(inputValue < minValue + 5.0 * step){
        return vec3(0.0, 1.0, 0.0);
    } else if(inputValue < minValue + 6.0 * step){
        return vec3(0.25, 0.75, 0.0);
    } else if(inputValue < minValue + 7.0 * step){
        return vec3(0.5, 0.5, 0.0);
    } else if(inputValue < minValue + 8.0 * step){
        return vec3(0.75, 0.25, 0.0);
    } else if(inputValue < minValue + 9.0 * step){
        return vec3(1.0, 0.0, 0.0);
    } else {
        return vec3(1.0, 1.0, 1.0);
    }

}

void main() {
    vec4 tempColor = texture2D(valueTexture, vUv); // 获取纹理颜色值
    float temp = tempColor.r; // 假设温度信息存储在红色通道

    vec3 color;

    color = value2color(temp,0.0,25.0);

    gl_FragColor = vec4(color, 1.0);
}
`;